/**
 * 810. 黑板异或游戏
 * https://leetcode-cn.com/problems/chalkboard-xor-game/
 */
public class Solutions_810 {
    public static void main(String[] args) {
        int[] nums = {1, 1, 2};  // output: false

        boolean result = xorGame(nums);
        System.out.println(result);
    }

    /**
     * 解题思路：
     * 只有两种情况，小红先手时，小红会赢
     * 1. 该小红时，nums 中全部元素异或结果为 0
     * 2. 该小红时，nums 中全部元素异或结果不为 0
     *      因为该小红选时，可以选择一个最优解，使剩下的元素的异或结果不为 0
     *      最终 nums 中只有一个元素给小明选，那么小红可以获胜
     */
    public static boolean xorGame(int[] nums) {
        // 该小红取，此时 nums 中全部元素的异或结果
        int xor = 0;
        for (int num : nums) {
            xor ^= num;
        }
        return xor == 0 || nums.length % 2 == 0;
    }
}
